[レポート][SVS211] AWS Application Composer が優れたアプリを構築するのにどのように役立つか #reinvent
はじめに
こんにちは、CX事業本部、re:Invent 2022 現地参加組の田中孝明です。
セッション概要
SVS211: [NEW LAUNCH!] How AWS Application Composer helps you and your team build great apps
サーバーレスアプリケーションには、多くの AWS サービスからの多くのリソースがあり、Infrastructure as Code と Well-Architected プロジェクトレイアウトの採用が成功の要件となります。 AWS が提供するさまざまなサーバーレスリソースタイプすべてに対してこれを行う方法を理解することは困難な場合があります。 AWS Application Composer は、チームがビジュアル キャンバスを使用してアプリケーションを構築する際のコラボレーションを支援します。 AWS Application Composer を使用すると、開発者はソフトウェア開発ライフサイクルを通じて繰り返しアプリケーションを構築できます。これには、IAM ポリシーの管理、サービスの統合と発見、およびプロジェクト資産の足場のための AWS Well-Architected プラクティスが含まれています。ツールに AWS Application Composer を使用すると、高度にスケーラブルで回復力があり、安全なアプリケーションを構築する際に、あなたとあなたのチームが加速できます。
セッション
Amazon API Gateway があり、そこからメッセージを取り出し Kafka のようなストリーミングに送ります。そのメッセージはコンピュートレイヤーに取り込まれ、データベースレイヤーに保存されます。 この4つのボックスを表現するのはそれほど難しいことではありません。 しかし、これを大規模かつ安全に行うことになると非常に困難です。 どうすれば開発者がこれらのコンポーネントを組み合わせて使えるようになるのか方法を考えてみました。AWSが提供する優れたアーキテクチャのソリューションを構築するための方法をすべて享受できるように。
自動化フレームワークを手に入れる本当のきっかけは、puppet、Ansible、chefなど。どれを選んでも再利用可能なインフラのセットをコードとして表現し、それを基に構築し知識を拡張し周りのチームに力を与えるという仕事をします。
しかし、私は何度もこのソフトウェアの使い方を人々に教えることになりました。開発チームと運用チームが初めて顔を合わせたとき、私がいたことでその場にいることで、それを解決する方法を尋ねてきたのです。 私は、このフレームワークを理解する手助けをするためにここにいるんだと。このフレームワークを説明するだけではダメなんだと気づいたのです。 このフレームワークを理解してもらわなければなりません。
私はどこに時間を使い、何に力を注ぐのかを変えただけなのです。
今となっては、AWS CloudFormation で管理する人がたくさんいますね。 IaC とサーバーレスを学んぶのは大変な挑戦です。 管理コンソールをクリックしハローワールドのようなものを見てサービスを理解するのと、実際に運用し開発環境を構築しようとするのでは全く違うのです。
皆さんの多くはすでにサーバーレスの利点について知っているでしょうし、たくさん聞いていると思います。 アプリケーションを構築する方法として採用すると、非常に素晴らしいことがあります。
規模は使用量に応じて変化します。価値に対してお金を払うのです。 POCを行う場合は小さなコストで始めることができます。 無料レベルのものが多いですね。時間が経つにつれて、単価が上がり、成長とともにコストも上がっていきます。 私たちのプラットフォームから得られる価値とクライアントや顧客に提供する価値がビジネスと同期しているのです。 適切なツールがあれば、セキュリティと運用の規模に合わせたアーキテクチャーが容易になります。
これを実現するのは必ずしも簡単ではありません。
お客様から、「サーバーレスは好きだ。サーバーレスのやり方は理解しているが、チームに教えなければならない、学習教材を提供するために、他の人と協力しなければならない。」と聞きます。
どのように機能するかを把握する。どんなアーキテクチャーのパラダイムシフトでもそうですが、効率的になるためには新しいツールやテクニックが必要です。サーバーレスにはいくつかのことが必要です。
把握しなければならないのは、Infrastructure as Code です。
AWS CloudFormation でうまく設計された S3 のベストプラクティスは必ずしも簡単ではありません。 すべてがデフォルトで暗号化されるようにしたい場合、いくつかの設定を追加する必要があります。 それが一般に公開されないようにしたいのであれば、さらにいくつかの設定を追加する必要があります。 転送中にすべてを暗号化する必要がある場合は、別のリソースタイプを追加する必要があります。
多少シンプルなリソースタイプであっても、それをうまく設定する方法について多くの知識が必要なのです。
アーキテクチャパターンについての理解が必要です。 クールなリソースがあります。これは Serverless Land のパターン集です。 たくさんの学習教材があります。
これは Amazon SNS の Topic です。すべてのプロパティについて必要なことが書かれています。 しかし、これでも1つのリソースで設定方法を学んで行くには膨大な情報量になります。 あなたが学び終わった後、隣の席のチームメイトにどう伝えたらよいでしょうか? 何をしたのか。これがどのように組み合わされているのか、どうやって理解するのでしょうか。
そこでアーキテクチャ図を作成します。この図には、非常に重要な情報がたくさん含まれています。 さらに別のものを追加します。そのとき、自分の手元にある図が古くなっていることに気づいている人はいるでしょうか? この方法は最終的な整合性を取る必要があります。
AWS Application Composer は、いくつかの重要な方法で私たちを助けてくれます。
アプリケーションを構築しながら、直感的なワークフローを使ってドラッグ&ドロップで、新規または既存のプロジェクトにリソースを追加し、それらを接続することができる。 APIを構築し、バックグラウンドのバッチ処理システム、イベント駆動型ワークロードを構築することができます。 すぐにわかるようにキャンバスを作成し、グラフとして物事を接続できるようにすることで、これがどのように組み合わされているかを理解するのに非常に大きな力を与えてくれることです。 チームメイトがこれを行うことで Infrastructure as Code を学び始めます。 リソースをキャンバスにドラッグ&ドロップし配線していくうちにインフラがどう変わるのかがわかるようになりました。 この反復プロセスを繰り返すことで、アプリケーションを拡張する際に、それらがどのように組み合わされているのかを確認できるようになったのです。 その結果、モダンなアプリケーションを開発する際に、より効果的なコミュニケーションを取ることができるようになったのです。
デモです、できることをいくつかお見せしましょう。 この画面はヒントのようなものです。今日触って見逃したかもしれない考え方のいくつかを説明しようと思っています。
テンプレートに関してはゼロから始めることもできますし、既存のものを持ち込むこともできます。
パネルにある S3 は、キャンバスにドラッグ&ドロップできるリソースです。 その S3 に対して視覚的に設定できるオプションがあります。
テンプレートに切り替えると、ここではいろいろなことが行われていることが見えます。 例えばパブリックアクセスをオフにすると、テンプレート自体がここで書き換わります。
これは S3 を使ってできることの一例です。この S3 を AWS Lambda に接続します。 テンプレートビューに戻りましょう。この AWS Lambda にはイベントが設定されていることがわかります。
これを中断することができます。 そうすると、これまでの設定がすべて取り消されます。 変更を加えるたびにテンプレートを一から書き直すようなことはしません。
もっと拡大したり、他のものを追加することもできます。SQS の例です。
デッドレターキューへ接続する場合です。
ブラウザで別のテンプレートを読み込み、Visual Studio Code でテンプレートを開いています。 メモリサイズを変更し、ビジュアルエディタで保存してみました。コードが更新されます。 Visual Studio Code でこの変更が行われます。双方向のライブシンクであることがわかります。
もう1つ、既存のプロジェクトのレイヤーをお見せしましょう。 これはサーバーレス・トリビア・ゲームと呼ばれる公開サンプルを少しアレンジしたものです。
図もかなり大きくなります。そこでシンプルにするため、AWS Application Composer のグループ機能をお見せします。
グループとは何でしょうか。これは視覚的にわかりやすくするために用意されています。 アプリケーションの規模が大きくなるにつれて、このようにグルーピングにしたいと思うでしょう。 リソースはたくさんあります。だから、それらを整理して見て回れるようにしたいんです。 グループはすべてこのメタデータに保存されます。
Group
のメタデータキーは以前の AWS CloudFormation から存在しており、後方互換性のない変更を加えたメタデータではありません。私たちはそれを使って、この AWS::Composer::Groups
を追加しています。
最後にフィードバックボタンについてです。
私たちは、あなたが投稿したものを読みます。 そして、新しいリソースのサポートを優先するつもりです。 今は、あなたが持っているものすべてを読み込むことをサポートできるようにしたいのです。
所感
新しく発表された AWS Application Composer についてデモを交えて説明するなど、面白いセッションでした。その後の質疑応答で先の展開について突っ込んだ質問があり、非常に興味深かったです。 Previewなので質疑応答の内容は差し控えるのですが、今後の展開が非常に気になるという聴衆の期待が込められていました。